using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using DG.Tweening;
using M0;
using M1;
using UnityEngine;
using UnityEngine.UI;

public class 主界面View : BaseWindow
{
    [SerializeField] private GameObject 任务界面;
    [SerializeField] private Text 任务title;
    [SerializeField] private Text 任务进度;
    
    [SerializeField] private GameObject 手指;

    private void Awake()
    {
        M.Event.AddEvent<int>(M.EventKey_接受任务,接受任务);
    }

    private void OnDestroy()
    {
        M.Event.RemoveEvent<int>(M.EventKey_接受任务,接受任务);
    }

    private void 接受任务(int id)
    {
        var 进行的任务 = Task管理器.Instance.Get进行中的任务();
        
        var model = 任务数据.Instance;
        var 配置 = model.get任务Data(id);

        var 进度 = 进行的任务.FirstOrDefault(f => f.任务类型 == 配置.Get类型);
        var 进度data = 进度.进行中的任务.FirstOrDefault(f => f.Id == id);

        接受更新任务(id, 进度data);

    }

    private Tweener 手指动画;
    private Tweener 摇杆动画;
    private 摇杆 摇;
    private bool 引导中 = false;
    public void 引导点击寻路()
    {
        手指.gameObject.SetActive(true);
        手指.transform.localPosition = new Vector3(20, -20f);
        手指动画 = 手指.transform.DOLocalMove(Vector3.zero, 0.5f).SetLoops(-1, LoopType.Yoyo);

        摇 = GameObject.FindObjectOfType<摇杆>();
        if (摇 != null)
        {
            var canvas = 摇.GetComponent<CanvasGroup>();
            canvas.alpha = 0.5f;
            摇杆动画 = canvas.DOFade(1, 0.5f).SetLoops(-1,LoopType.Yoyo);
        }

        引导中 = true;
    }
    
    private void 接受更新任务(int id,任务进度 进度)
    {
        var model = 任务数据.Instance;
        var 配置 = model.get任务Data(id);
        curdata = 配置;
        任务title.text = 配置.描述;
        任务进度.text = $"({进度.完成进度}/{配置.Target})";
        取消任务引导();
    }

    public override void OpenWindow()
    {
        base.OpenWindow();
        var 进行的任务 = Task管理器.Instance.Get进行中的任务();
        
        var 主线任务 = 进行的任务.FirstOrDefault(w => w.任务类型 == TaskType.主线任务);
        if (主线任务!= null && 主线任务.进行中的任务.Count>0)
        {
            int id = 主线任务.进行中的任务[0].Id;
            接受更新任务(id,主线任务.进行中的任务[0]);
        }
    }

    private 任务Data curdata;

    public void 点击寻路()
    {
        任务数据.Instance.任务寻路(curdata);
        if (引导中)
        {
            取消任务引导();
        }
        
        
    }

    private void 取消任务引导()
    {
        引导中 = false;
        if (手指动画 != null)
        {
            手指动画.Kill();
        }

        if (手指.activeSelf)
        {
            手指.gameObject.SetActive(false);
        }

        if (摇杆动画 != null)
        {
            摇杆动画.Kill();
        }

        if (摇 != null)
        {
            var canvas = 摇.GetComponent<CanvasGroup>();
            canvas.alpha = 0.5f;
        }
    }
}
